package cn.gok.exceptionHandler;

import cn.hutool.json.JSONUtil;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;


/**
 自定义Sprig mvc异常处理器方式2：

    自定义全局异常处理器： 需要借助@ControllerAdvice注解实现

    @ControllerAdvice 可以将当前类中的方法 增强给 Spring MVC中的Controller类，
                      也即是说所有的Controller都自动具备了当前类中的方法。
 */
@ControllerAdvice
public class MyExceptionHandler02 {

    private Logger logger = LoggerFactory.getLogger(MyExceptionHandler02.class);


    @ExceptionHandler
    public String exceptionHandler(HttpServletRequest request,Exception ex){
//        Logger logger = LogManager.getLogger(MyExceptionHandler02.class);

         /*
            1、先记录异常的基础信息：
                    请求的地址信息
                    请求的参数信息
                    报的异常
         */
        String serverName = request.getServerName();
        int serverPort = request.getServerPort();
        String servletPath = request.getServletPath();
        Map parameterMap =  request.getParameterMap();

        logger.error("错误请求地址：http://" + serverName + ":" + serverPort + servletPath);
        String paramStr = JSONUtil.toJsonStr(parameterMap);
        logger.error("请求的参数为： " + paramStr);

        //打印错误信息
        logger.error(ex.getMessage(),ex);
        return "error";
    }
}
